/**
 * @file HZipEngine.h
 * @brief 压缩/解压缩引擎核心类
 * @details 定义了压缩和解压缩的核心接口
 */

#ifndef HZIP_ENGINE_H
#define HZIP_ENGINE_H

#include <SupportDefs.h>
#include <String.h>
#include <Path.h>
#include <File.h>
#include <Directory.h>
#include <Entry.h>
#include <OS.h>

// 前向声明
class FormatPlugin;

/**
 * @class HZipEngine
 * @brief 压缩/解压缩引擎核心类
 * @details 负责调用相应的格式插件进行压缩和解压缩操作
 */
class HZipEngine
{
public:
    /**
     * @brief 构造函数
     */
    HZipEngine();

    /**
     * @brief 析构函数
     */
    ~HZipEngine();

    /**
     * @brief 压缩文件或目录
     * @param format 压缩格式（如"zip", "tar.gz"等）
     * @param sourcePath 源文件或目录路径
     * @param targetPath 目标压缩文件路径
     * @return 操作是否成功
     */
    bool Compress(const char *format, const char *sourcePath, const char *targetPath);

    /**
     * @brief 解压缩文件
     * @param sourcePath 源压缩文件路径
     * @param targetPath 目标解压目录
     * @return 操作是否成功
     */
    bool Extract(const char *sourcePath, const char *targetPath);

    /**
     * @brief 获取支持的压缩格式列表
     * @return 格式列表字符串
     */
    BString GetSupportedFormats() const;

    /**
     * @brief 检查文件格式是否受支持
     * @param format 格式名称
     * @return 是否支持
     */
    bool IsFormatSupported(const char *format) const;

private:
    /**
     * @brief 获取适用于指定格式的插件
     * @param format 格式名称
     * @return 插件指针，如果不支持则返回NULL
     */
    FormatPlugin *_GetPluginForFormat(const char *format) const;

    /**
     * @brief 根据文件扩展名获取格式
     * @param path 文件路径
     * @return 格式名称
     */
    BString _GetFormatFromExtension(const char *path) const;
};

#endif // HZIP_ENGINE_H